Micron Document
`:top
`!Wertparameter`! (engl. `*call by value`* oder `*pass by value`*) sind `F33f`_`[Parameter`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Parameter_(Informatik)]`_`f von Unterprogrammen, die Kopien der beim Aufruf übergebenen Argumente speichern. Neben Wertparametern stellen `F33f`_`[Programmiersprachen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Programmiersprachen]`_`f oft auch `F33f`_`[Referenzparameter`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Referenzparameter]`_`f zur Verfügung, die nur einen anderen Namen (Alias) für die übergebenen Argumente bilden und die Veränderung dieser erlauben können.

>>Contents

• `F0af`_`[Beispiel`#beispiel]`_`f
• `F0af`_`[Implementierung`#implementierung]`_`f
• `F0af`_`[Verwendende Programmiersprachen (Auszug)`#verwendende-programmiersprachen-auszug]`_`f
• `F0af`_`[Siehe auch`#siehe-auch]`_`f

-─

>>Beispiel

Die Programmiersprache `F33f`_`[C`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C_(Programmiersprache)]`_`f verwendet stets Wertparameter.

Funktionsdefinition:

`B100`F9d9void unwirksamerTausch(int p1, int p2) {`f`b
`B100`F9d9 int tmp = p1;`f`b
`B100`F9d9 p1 = p2;`f`b
`B100`F9d9 p2 = tmp;`f`b
`B100`F9d9}`f`b

Funktionsaufruf:

`B100`F9d9 int a1 = 1; int a2 = 2;`f`b
`B100`F9d9 unwirksamerTausch(a1, a2);`f`b
`B100`F9d9 printf("%i, %i", a1, a2);`f`b

Ausgabe:

`B100`F9d91, 2`f`b

Die Werte der `F33f`_`[Variablen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Variable_(Programmierung)]`_`f `*a1`* und `*a2`* werden bei der Übergabe an die `F33f`_`[Funktion`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Funktion_(Programmierung)]`_`f `*unwirksamerTausch`* in deren Parameter `*p1`* und `*p2`* kopiert und nur innerhalb dieser vertauscht.

Felder werden in C stets als Zeiger angelegt und dieser, nicht das Feld, als Wertparameter übergeben. Auch Zeiger werden also als Wertparameter übergeben, Zeigerargumente also in die Funktionsparameter kopiert. Mit diesen Parametern können aber, aufgrund der Zeigernatur, die nicht zur Funktion gehörenden Daten verändert werden. Dies ist nicht gleichbedeutend mit einem `*`F33f`_`[call by reference`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Call_by_reference]`_`f`*, bietet aber ähnliche Möglichkeiten.

>>Implementierung

Wird eine Zuweisung innerhalb des Unterprogrammes an einen Wertparameter vorgenommen, muss ein Compiler beim Unterprogrammaufruf eine `*Kopie`* des Parameters erzeugen. Hierfür ist sowohl Speicherplatz als auch Ausführungszeit erforderlich. Bei größeren Datenstrukturen, wie z. B. großen Feldern, kann dies problematisch sein.

Optimierende `F33f`_`[Compiler`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Compiler]`_`f können automatisch ermitteln, ob eine solche Kopie nötig ist und gegebenenfalls darauf verzichten.

>>Verwendende Programmiersprachen (Auszug)

• `F33f`_`[Java`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Java_(Programmiersprache)]`_`f
• `F33f`_`[C`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C_(Programmiersprache)]`_`f
• `F33f`_`[C++`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C++]`_`f
• `F33f`_`[C#`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C-Sharp]`_`f
• `F33f`_`[Pascal`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Pascal_(Programmiersprache)]`_`f
• `F33f`_`[Modula-2`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Modula-2]`_`f
• `F33f`_`[Ada`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Ada_(Programmiersprache)]`_`f
• `F33f`_`[PHP`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=PHP]`_`f

>>Siehe auch

• `F33f`_`[Referenzparameter`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Referenzparameter]`_`f, auch `*call by reference`*

`c`F0af`_`[↑ Back to top`#top]`_`f`a